package com.coding.util;

import com.alibaba.fastjson2.JSON; // 导入阿里巴巴的fastjson2库用于JSON处理
import com.alibaba.fastjson2.JSONObject; // 导入阿里巴巴的fastjson2库用于JSON对象处理
import com.aliyun.auth.credentials.Credential; // 导入用于处理阿里云凭证
import com.aliyun.auth.credentials.provider.StaticCredentialProvider; // 导入用于提供静态凭证
import com.aliyun.sdk.service.dysmsapi20170525.models.*; // 导入阿里云短信API相关的模型类
import com.aliyun.sdk.service.dysmsapi20170525.*; // 导入阿里云短信API客户端类
import com.google.gson.Gson; // 导入Gson库用于JSON转换
import darabonba.core.client.ClientOverrideConfiguration; // 导入客户端配置类

import java.util.concurrent.CompletableFuture; // 导入用于处理异步操作的类
import java.util.concurrent.ExecutionException; // 导入用于处理异步执行异常的类

public class SendSms {

    // 定义一个发送短信的方法，接收一个电话号码作为参数
    public static String sendSMS(String phone) throws ExecutionException, InterruptedException {
        // 生成一个六位随机数验证码
        String sixBitRandom = RandomUtil.getSixBitRandom();

        // 创建静态凭证提供者，使用阿里云的AccessKeyId和AccessKeySecret
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId("LTAI5tLxxJ1GEyzPykUC2xNY") // 替换为你的AccessKeyId
                .accessKeySecret("N7s9DJtOX5Ax2KUV3DIBhB3nQtSRCp") // 替换为你的AccessKeySecret
                .build());

        // 创建异步短信客户端，设置区域ID和凭证提供者
        AsyncClient client = AsyncClient.builder()
                .region("cn-hangzhou") // 设置区域ID
                .credentialsProvider(provider) // 设置凭证提供者
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("dysmsapi.aliyuncs.com") // 设置API的终端点
                )
                .build();

        // 创建一个JSON对象，包含验证码信息
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", sixBitRandom);

        // 创建发送短信的请求，设置签名名称、模板代码、电话号码和模板参数
        SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
                .signName("阿里云短信测试") // 替换为你的短信签名
                .templateCode("SMS_154950909") // 替换为你的短信模板代码
                .phoneNumbers(phone) // 设置接收短信的电话号码
                .templateParam(JSON.toJSONString(jsonObject)) // 设置模板参数为JSON格式的验证码信息
                .build();

        // 发送短信请求，并获取响应
        CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
        SendSmsResponse resp = response.get();

        // 打印响应结果
        System.out.println(new Gson().toJson(resp));

        // 关闭客户端
        client.close();
        return sixBitRandom;
    }


}
